/**
 * 抽象类和接口
 * 创建抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样使用他们.
 * 抽象类还是有用的重构器,因为它们使我们可以很容易地将公共方法沿着继承层次结构向上移动
 */
/**
 * 在使用接口过程中需要注意如下几个问题：
1、1个 Interface 的方所有法访问权限自动被声明为 public。确切的说只能为 public，当然你可以显示的声明为 protected、private，但是编译会出错！
2、接口中可以定义“成员变量”，或者说是不可变的常量，因为接口中的“成员变量”会自动变为为 public static final。可以通过类命名直接访问：ImplementClass.name。
3、接口中不存在实现的方法。
4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
5、不能使用 new 操作符实例化一个接口，但可以声明一个接口变量，该变量必须引用 (refer to) 一个实现该接口的类的对象。
       可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如：if(anObject instanceof Comparable){}。
6、在实现多接口的时候一定要避免方法名的
 * */
//抽象类和接口的区别
/**语法层次
 * 抽象类方式中，抽象类可以拥有任意范围的成员数据，同时也可以拥有自己的非抽象方法，但是接口方式中，
 * 它仅能够有静态、不能修改的成员数据（但是我们一般是不会在接口中使用成员数据），同时它所有的方法都必须是抽象的。在某种程度上来说，接口是抽象类的特殊化。
 * 对子类而言，它只能继承一个抽象类（这是 java 为了数据安全而考虑的），但是却可以实现多个接口。
 */
/**
 *设计层次
 *1、 抽象层次不同。抽象类是对类抽象，而接口是对行为的抽象。抽象类是对整个类整体进行抽象，包括属性、行为，但是接口却是对类局部（行为）进行抽象。
 *2、 跨域不同。抽象类所跨域的是具有相似特点的类，而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分，
 *然后泛化成抽象类，子类继承该父类即可，但是接口不同。实现它的子类可以不存在任何关系，共同之处 
 **/
/**
 *ISP（Interface Segregation Principle）`：面向对象的一个核心原则。它表明使用多个专门的接口比使用单一的总接口要好。
 *一个类对另外一个类的依赖性应当是建立在最小的接口上的。一个接口代表一个角色，不应当将不同的角色都交给一个接口。
 *没有关系的接口合并在一起，形成一个臃肿的大接口，这是对角色和接口的污染 
 **/
/*总结：
 * 1、抽象类在 Java 语言中所表示的是一种继承关系，一个子类只能存在一个父类，但是可以存在多个接口。
 * 2、在抽象类中可以拥有自己的成员变量和非抽象类方法，但是接口中只能存在静态的不可变的成员数据（不过一般都不在接口中定义成员数据），而且它的所有方法都是抽象的。
 * 3、抽象类和接口所反映的设计理念是不同的，抽象类所代表的是“is-a”的关系，而接口所代表的是“likea”的关系。抽象类和接口是 Java 语言中两种不同的抽象概念，
 * 他们的存在对多态提供了非常好的支持，虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。
 * 只有对问题域的本质有良好的理解，才能做出正确、合理的设计。
 **/
/**
 * @author admin
 *
 */
package javaBase.abstractRunable;